package com.muyu.cart.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 购物车实体类
 *
 * @author JiaCheng
 * @version 1.0
 * @since 2025-09-21
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("cart_manager")
public class CartManager implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 产品规格ID（sku）
     */
    private Long skuId;

    /**
     * 产品ID（spu，冗余便于筛选）
     */
    private Long productId;

    /**
     * 数量
     */
    private Integer quantity;

    /**
     * 勾选状态（false=未选，true=已选）
     */
    private Boolean isSelected;

    /**
     * 软删除（false=正常，true=已删除）
     */
    private Boolean isDeleted;

    /**
     * 规格单价快照（加入时/展示用）
     */
    private BigDecimal skuPrice;

    /**
     * 原价/市场价快照（可为空）
     */
    private BigDecimal originPrice;

    /**
     * 商品名称（冗余，展示）
     */
    private String productName;

    /**
     * 商品缩略图（展示）
     */
    private String productThumbnail;

    /**
     * 库存/上下架状态：0=正常,1=库存不足,2=下架,3=异常
     */
    private Integer inventoryStatus;

    /**
     * 最后一次库存/价格校验时间
     */
    private LocalDateTime lastCheckTime;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新者
     */
    private String updateBy;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 备注
     */
    private String remark;

    /**
     * 商品价格（兼容旧字段名）
     */
    public BigDecimal getPrice() {
        return this.skuPrice;
    }

    public void setPrice(BigDecimal price) {
        this.skuPrice = price;
    }

    /**
     * 规格描述（兼容旧字段名）
     */
    public String getSpecs() {
        return this.remark; // 使用remark字段存储规格描述
    }

    public void setSpecs(String specs) {
        this.remark = specs;
    }
}